package game;

/**
 * Rechteck. Generische Fläche von Objekten.
 * 
 * @author mariuswi
 */

public class Rectangle {
    //Attribute
    
    //Ecken links oben und rechts unten
    private int topx;
    private int topy;
    private int width;
    private int height;
    
    //Konstruktoren-------------
    
    Rectangle(){
        this.topx = 0;
        this.topy = 0;
    }
     /**
     * Position einstellen. x,y links oben und x,y rechts unten
     * @param topx
     * @param topy 
     * @param botx
     * @param boty 
     */
    Rectangle(int topx,int topy,int width,int height){
        this.topx = topx;
        this.topy = topy;
        
        this.width = width;
        this.height = height;
    }
    
    //Methoden
    /**
     * Stellt die linke obere Ecke des Rechtecks ein
     * @param topx
     * @param topy
     */
    public void setPosition(int topx,int topy){
        this.topx = topx;
       // this.botx = topx + width;
        this.topy = topy;
        //this.boty = topy + height;
    }
    /**
     * Testet ob der Punkt mit x,y innerhalb des Rechtecks ist
     * @param x
     * @param y
     * @return isInside
     */
    public boolean isInside(int x, int y){
        boolean inside = false;
        
        if((x >= topx && x <= topx + width) && (y >= topy && y<=topy + height)){
            inside = true;
        }
        return inside;
    }
    
    /**
     * Überprueft, ob sich dieses Rechteck mit übergebenem Rechteck ueberschneidet
     * @param r Zu Prüfendes Rechteck
     * @return TRUE bei Überschneidung bzw. Kollision beider Rechtecke
     */
    boolean collidesWith (Rectangle r) {
        int diffX = r.getTopx()-this.getTopx();
        int diffY = r.getTopy()-this.getTopy();
        
        if(   diffX < 0   ) { //Rechteck zwei links von Rechteck eins
            
            if(   diffY < 0   ) { //Rechteck zwei ueber Rechteck eins
                if ((-diffX) < r.getWidth() && (-diffY) < r.getHeight())
                    return true;
            } else { ////Rechteck zwei unter Rechteck eins
                if ((-diffX) < r.getWidth() && diffY < this.getHeight())
                    return true;
            }
        } 
        else { //Rechteck zwei rechts von Rechteck eins
            
            if(   diffY < 0   ) { //Rechteck zwei ueber Rechteck eins
                if (diffX < this.getWidth() && (-diffY) < r.getHeight())
                    return true;
            } else { ////Rechteck zwei unter Rechteck eins
                if (diffX < this.getWidth() && diffY < this.getHeight())
                    return true;
            }
        }
        return false;
    }

    public int getTopx() {
        return topx;
    }

    public int getTopy() {
        return topy;
    }
    
    public int getWidth(){
        return this.width;
    }
    public int getHeight(){
        return this.height;
    }
    
}
